package model.parser;

import java.io.File;
import java.util.List;
import model.policia.Policia;

import org.jdom2.Document;
import org.jdom2.Element;
import java.io.FileWriter;
import java.io.IOException;
import org.jdom2.Attribute;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class ParserPartida extends Parser {
	
	private String URLArchivo = "archivos xml/partidas.xml";
	private File archivo = new File(URLArchivo);
	private Document documento;
	private Element nodoRaiz;
	private List<Element> listaPartidas;
	
	public ParserPartida() {
		documento = super.crearDoc(documento, archivo, URLArchivo);
		nodoRaiz = documento.getRootElement();
		/* Obtenemos el nodo principal	 */
		
		listaPartidas = nodoRaiz.getChildren("policia");
	/* Creamos una lista con los nodos secundario	 */
	}

	public Policia cargarPoliciaPorNombre(String nombrePoliciaIngresado){
		int i=0;
		Element nodo = (Element) listaPartidas.get(i);
		String nombre = nodo.getAttribute("nombre").getValue();
		try{
			while (!nombrePoliciaIngresado.equals(nombre)){
			i += 1;
			nodo = (Element) listaPartidas.get(i);
			nombre = nodo.getAttribute("nombre").getValue();
		}}catch( IndexOutOfBoundsException e){ return(this.crearPolicia(nombrePoliciaIngresado));} //Si no lo encontro, lo crea
		// Si lo encontroo, lo carga en las lineas que siguen
		int cantidadarrestos = Integer.parseInt(nodo.getChild("cantidadarrestos").getValue());
		Policia poli = new Policia(nombre);
		for(int j=0; j<cantidadarrestos;j++){
		poli.sumarArresto();
		}
		return poli;
	}

	private Policia crearPolicia(String nombrePoliciaIngresado) {

	      try {
	 
	        Element policia = new Element("policia");
	        policia.setAttribute(new Attribute("nombre", nombrePoliciaIngresado));
	        policia.addContent(new Element("cantidadarrestos").setText("0"));
	 
	        documento.getRootElement().addContent(policia);
	 
	        // objeto que realiza la salida en un xml
	        XMLOutputter xmlOutput = new XMLOutputter();
	         // escribir el xml
	        xmlOutput.setFormat(Format.getPrettyFormat());
	        xmlOutput.output(documento, new FileWriter(URLArchivo));
	      } catch (IOException io) {
	        System.out.println(io.getMessage());
	      }
		Policia poli = new Policia(nombrePoliciaIngresado);
		return poli;
	}

	public void guardarArrestosAPoliciaEnXML(Policia policia){
		int i=0;
		Element nodo = (Element) listaPartidas.get(i);
		String nombre = nodo.getAttribute("nombre").getValue();
		while (!policia.getNombre().equals(nombre)){
			i += 1;
			nodo = (Element) listaPartidas.get(i);
			nombre = nodo.getAttribute("nombre").getValue();	
		}
		int cantidadarrestos = policia.getCantidadArrestos();//Integer.parseInt(nodo.getChild("cantidadarrestos").getValue());
		//cantidadarrestos+=1;
		nodo.getChild("cantidadarrestos").setText(Integer.toString(cantidadarrestos));
	     try {
		    XMLOutputter xmlOutput = new XMLOutputter();
	 		xmlOutput.setFormat(Format.getPrettyFormat());
	        xmlOutput.output(documento, new FileWriter(URLArchivo));
	     }catch (IOException io) {
	        System.out.println(io.getMessage());
	      }
		
	}
		
}
